#include<stdio.h>
#include<unistd.h>
#include<string.h>

int main()
{
    //C接口
    printf("hello printf\n");
    fprintf(stdout,"hello fprintf\n");
    const char *fputsString = "hello fputs\n";
    fputs(fputsString,stdout);

    //系统接口
   const char* wstring = "hello write\n";
   write(1,wstring,strlen(wstring));

   //在代码结束之前,创建子进程
   //1.如果我没有进行>,看到了4条消息
   // stdout默认使用的是行刷新，在进程fork之前，三条C函数已经将数据进行打印输出到显示器上(外设)，我的FILE内部，进程不存在的对应的数据了
   // 2.如果我进行了>,写入文件不再是显示器，而是普通文件，采用的刷新策略是全缓冲，之前的3条C显示函数，虽然带了\n，但是不足以stdout缓冲区写满！数据并没有被刷新！！
   //执行fork的时候，stdout属于父进程，创建子进程时，紧接着就是进程退出！谁先退出，一定要进行缓冲区刷新(就是修改)
   //写时拷贝！！数据最终会显示两份
   //3.write为什么没有呢？上面的过程和write无关，write没有FILE，而是用的是fd，就没有C提供的缓冲区
   fork();

   return 0;
}


///////////////////////////////////////////////////////////

//缓冲区刷新策略问题
//a.立即刷新 -- 无缓冲
//b.行率先你 -- 行缓存 -- 显示器
//缓冲区满 -- 全缓冲 -- 磁盘文件

//C语言给我们提供的缓冲区：
//这个缓冲区，在stdout,stdin,stderr -> FILE* -> FILE结构体 -> fd && 还包括了一个缓冲区！！
